// import com.alibaba.druid.DbType;
// import com.alibaba.druid.sql.ast.*;
// import com.alibaba.druid.sql.ast.statement.SQLCreateIndexStatement;
// import com.alibaba.druid.sql.ast.statement.SQLCreateStatement;
// import com.alibaba.druid.sql.dialect.oracle.ast.OracleSegmentAttributes;
// import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "../../../../ast/statement/SQLCreateIndexStatement.h"
#include "../../../../ast/statement/SQLCreateStatement.h"
#include "OracleDDLStatement.h"
#include "../OracleSegmentAttributes.h"

class OracleCreateIndexStatement
    : virtual public SQLCreateIndexStatement,
      virtual public OracleDDLStatement,
      virtual public OracleSegmentAttributes,
      virtual public SQLCreateStatement
{
public:
  BOOL_ptr online;

  BOOL_ptr indexOnlyTopLevel;
  BOOL_ptr cluster;

  BOOL_ptr noParallel;

  SQLExpr_ptr parallel;

  int pctfree;
  int pctused;
  int initrans;

  int maxtrans;
  int pctincrease;
  int freeLists;
  BOOL_ptr compress;
  int compressLevel;
  BOOL_ptr compressForOltp;
  int pctthreshold;

  BOOL_ptr logging;
  BOOL_ptr sort;
  BOOL_ptr reverse;

  SQLName_ptr tablespace;
  SQLObject_ptr storage;

  BOOL_ptr enable;

  BOOL_ptr computeStatistics;

  OracleCreateIndexStatement();
  SHAREDOBJECT(OracleCreateIndexStatement);

  SQLExpr_ptr getParallel();

  void setParallel(SQLExpr_ptr parallel);

  BOOL_ptr isNoParallel();

  void setNoParallel(BOOL_ptr noParallel);

  BOOL_ptr isIndexOnlyTopLevel();

  void setIndexOnlyTopLevel(BOOL_ptr indexOnlyTopLevel);

  BOOL_ptr getSort();

  void setSort(BOOL_ptr sort);

  BOOL_ptr isReverse();

  void setReverse(BOOL_ptr reverse);

  BOOL_ptr local;
  SQLName_list_ptr localStoreIn;
  SQLPartition_list_ptr localPartitions;

  BOOL_ptr global;
  SQLPartitionBy_list_ptr globalPartitions;

  void accept0(SQLASTVisitor_ptr visitor);

  // @Override
  void accept0(OracleASTVisitor_ptr visitor);

  BOOL_ptr getEnable();

  void setEnable(BOOL_ptr enable);

  BOOL_ptr isComputeStatistics();

  void setComputeStatistics(BOOL_ptr computeStatistics);

  BOOL_ptr isOnline();

  void setOnline(BOOL_ptr online);

  BOOL_ptr isCluster();

  void setCluster(BOOL_ptr cluster);

  //////////////

  SQLName_ptr getTablespace();

  void setTablespace(SQLName_ptr tablespace);

  BOOL_ptr getCompress();

  void setCompress(BOOL_ptr compress);

  int getCompressLevel();

  void setCompressLevel(int compressLevel);

  int getPctthreshold();

  void setPctthreshold(int pctthreshold);

  int getPctfree();

  void setPctfree(int ptcfree);

  int getPctused();

  void setPctused(int ptcused);

  int getInitrans();

  void setInitrans(int initrans);

  int getMaxtrans();

  void setMaxtrans(int maxtrans);

  int getPctincrease();

  void setPctincrease(int pctincrease);

  int getFreeLists();

  void setFreeLists(int freeLists);

  BOOL_ptr getLogging();

  void setLogging(BOOL_ptr logging);

  SQLObject_ptr getStorage();

  void setStorage(SQLObject_ptr storage);

  BOOL_ptr isCompressForOltp();

  void setCompressForOltp(BOOL_ptr compressForOltp);

  SQLPartition_list_ptr getLocalPartitions();

  BOOL_ptr isLocal();

  void setLocal(BOOL_ptr local);

  SQLName_list_ptr getLocalStoreIn();

  SQLPartitionBy_list_ptr getGlobalPartitions();

  BOOL_ptr isGlobal();

  void setGlobal(BOOL_ptr global);
};
